
<%@page import="com.lmpop.trade.ti_teambuy.Ti_teambuyInfo"%>
<%@page import="com.lmpop.trade.ti_orderinfo.Ti_orderinfoInfo"%>
<%@page import="com.lmpop.trade.tb_orderstate.Tb_orderstateInfo"%>
<%@page import="com.lmpop.trade.tb_goodstock.Tb_goodstockInfo"%>

<%@page import="com.lmpop.frame.SysMap"%>
<%@page import="com.lmpop.frame.dao.DbmInterf"%>
<%@page import="com.lmpop.frame.dao.IbatisDbmImpl"%>

<%@page import="com.lmpop.trade.ti_inquiry.Ti_inquiryInfo"%><%
/* *
 功能：支付宝服务器异步通知页面
 版本：3.2
 日期：2011-03-17
 说明：
 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
 该代码仅供学习和研究支付宝接口使用，只是提供一个参考。

 //***********页面功能说明***********
 创建该页面文件时，请留心该页面文件中无任何HTML代码及空格。
 该页面不能在本机电脑测试，请到服务器上做测试。请确保外部可以访问该页面。
 该页面调试工具请使用写文本函数logResult，该函数在com.alipay.util文件夹的AlipayNotify.java类文件中
 如果没有收到该页面返回的 success 信息，支付宝会在24小时内按一定的时间策略重发通知
 TRADE_FINISHED(表示交易已经成功结束，为普通即时到帐的交易状态成功标识);
 TRADE_SUCCESS(表示交易已经成功结束，为高级即时到帐的交易状态成功标识);
 //********************************
 * */
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*"%>
<%@ page import="com.alipaydb.util.*"%>
<%@ page import="com.alipaydb.util.*"%>
<%@ page import="com.alipaydb.config.*"%>
<%@ page import="com.lmpop.trade.ti_teamorder.*"%>
<%@page import="com.lmpop.trade.ti_finance.*"%>
<%@page import="com.lmpop.trade.ti_comm_give.Ti_comm_giveInfo"%>
<%@ page import="com.lmpop.trade.ti_payment.*"%>
<%
	DbmInterf dbmMgr = new IbatisDbmImpl();
	SysMap symap = new SysMap();
	Ti_orderinfoInfo orderinfo = new Ti_orderinfoInfo();
	Tb_orderstateInfo orderstateinfo = new Tb_orderstateInfo();
	Tb_goodstockInfo goodstockinfo = new Tb_goodstockInfo();
	
	//获取支付宝POST过来反馈信息
	Map<String,String> params = new Hashtable<String,String>();
	Map requestParams = request.getParameterMap();
	for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
		String name = (String) iter.next();
		String[] values = (String[]) requestParams.get(name);
		String valueStr = "";
		for (int i = 0; i < values.length; i++) {
			valueStr = (i == values.length - 1) ? valueStr + values[i]
					: valueStr + values[i] + ",";
		}
		//乱码解决，这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
		//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "UTF-8");
		params.put(name, valueStr);
	}
  
  
	
	//获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//

//获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//
	String trade_no = request.getParameter("trade_no");				//支付宝交易号
	String order_no = request.getParameter("out_trade_no");	//获取订单号
	String only_kind = request.getParameter("body");//唯一标识团购的订单
	String price = request.getParameter("price");//唯一标识团购的订单
	if(only_kind==null){
		only_kind="";
	}
	String trade_status = request.getParameter("trade_status");		//交易状态
	//获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//
	
	/**获取商家key**/
	
	List orderlist = orderinfo.getListByPk(order_no);		
	String key="",partner="",seller_email="";
	if(orderlist!=null && orderlist.size()>0){
			Hashtable newsMap = (Hashtable)orderlist.get(0);
			String cust_id = "";
			if(newsMap.get("cust_id")!=null && !newsMap.get("cust_id").toString().equals("")){
				cust_id = newsMap.get("cust_id").toString();
			}
			Map payparams=new Hashtable();
			payparams.put("cust_id",cust_id);
			payparams.put("pay_code","alipay");
			Map alipayMap = new Ti_paymentInfo().getCustAlipayInfo(payparams); 
			if(alipayMap!=null){			
				key = alipayMap.get("passwd").toString();	
				partner = alipayMap.get("pay_account").toString();		 
			  seller_email = alipayMap.get("pay_email").toString();			
			}
			AlipayConfig.partner=partner;
		  AlipayConfig.key=key;
		  AlipayConfig.seller_email=seller_email;
	}
	
	
	
	Ti_teamorderInfo teamorderInfo=null;
	Ti_groupVoucherInfo groupVoucherInfo=null;
	Ti_teambuyInfo ti_teambuyInfo=null;
	Ti_comm_giveInfo comm_giveInfo=null;
	Ti_financeInfo financeInfo =null;
	int teamOrderState=0;
	List smsList=null;
	Ti_orderinfoInfo orderInfo	 =null;
	int sOld_trade_status=0;
	List temp=null;
	String trade_state_code="0";
	Ti_inquiryInfo inquiryInfo =new Ti_inquiryInfo();
	if(!only_kind.equals("lawyer")){
	   teamorderInfo = new Ti_teamorderInfo();
	   groupVoucherInfo =new Ti_groupVoucherInfo();
	   ti_teambuyInfo=new Ti_teambuyInfo();
       comm_giveInfo = new Ti_comm_giveInfo();
	   financeInfo = new Ti_financeInfo();
	   teamOrderState=teamorderInfo.getTeambuyStateByID(order_no);
	   smsList=teamorderInfo.getListByPk(order_no);
			 //订单状态
	  orderInfo=new Ti_orderinfoInfo();
	  sOld_trade_status=orderInfo.getOrderStateByID(order_no); //查询订单状态	
	  temp=orderInfo.getOrderInfoByID(order_no);
	
	}
	
	
	//获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//
  //验证成功
	if(AlipayNotify.verify(params)){
	
		/**该判断表示买家已在支付宝交易管理中产生了交易记录且付款成功，但卖家没有发货**/		
		if(trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS"))
		{ 
					Map map = new Hashtable();
					map.put("order_no",order_no);
					//团购订单
				  if (only_kind.equals("1"))
				  {
				     
				  		if(teamOrderState==0){
				  		//判断该订单是配送还是发送券，若是发送券，则获取手机号，发送券和密码
							Map tempmap=groupVoucherInfo.checkTeamOrderType(order_no);
							if(tempmap!=null&&"1".equals(tempmap.get("type").toString())){
								groupVoucherInfo.insertTi_groupVoucher(tempmap);
								map.put("order_state","3");
								teamorderInfo.updateGroupVoucherNumByOrderNo(order_no);
							}else{
								 map.put("order_state","1");
							}					
							teamorderInfo.updateTeambuyStateByOnliePay(map);//修改订单状态
							ti_teambuyInfo.updateTeamNumByOrderNo(order_no); ////更新购买人数及购买数量
							financeInfo.updateTi_financeUsevmoneyByOrderNO(order_no);//如果订单使用虚拟币付款，需修改虚拟币
							map.put("trade_state_code","1");
							trade_state_code=comm_giveInfo.updateCommStateByOnliePay(map);		
				      if (trade_state_code.equals("1"))
				      {
				      	map.put("use_vmoney","10");
				        map.put("finance_type","1");
							 	map.put("account_type","1");
							 	financeInfo.updateUse_MoneyByOnliePay(map);//修改虚拟币
				      }	
		 			}
				}
				//联合商务订单
				else if(only_kind.equals("lhsw"))
				{
					map.put("trade_id",order_no);
					map.put("rsrv_str1","1");  //已支付
					inquiryInfo.updateTi_inquiryOrderState(map);
				}
				else
				{					 
					map.put("order_state","1");
					orderInfo.updateOrderStateByOnliePay(map);//修改订单状态
					if(temp!=null&&temp.size()>0)
					{
						map=(Hashtable)temp.get(0);						 
						if(map.get("inter_num")==null||"".equals(map.get("inter_num").toString()))	map.put("use_vmoney","0");
						else	map.put("use_vmoney",map.get("inter_num").toString());
						map.put("finance_type","0");
						map.put("account_type","0");
						financeInfo.updatePointByOnliePay(map);//修改积分
					}
					
					symap.setString("order_no",order_no);
					symap.setString("order_state","1");	
					orderinfo.updateOrderStateForOrderNo(dbmMgr,symap);
					orderstateinfo.insert(dbmMgr,symap);
					goodstockinfo.updateGoodsStock(dbmMgr,symap);				 
					 
					 						
				}
			out.println("success");	//请不要修改或删除
		} 
		/**
		该判断表示买家已在支付宝交易管理中产生了交易记录且付款成功，但卖家没有发货			
	  判断该笔订单是否在商户网站中已经做过处理（可参考“集成教程”中“3.4返回数据处理”）
	  如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
		如果有做过处理，不执行商户的业务程序
		**/
		else if(trade_status.equals("WAIT_SELLER_SEND_GOODS"))
		{			
				Map maps = new Hashtable();
				maps.put("order_no",order_no);
				if (only_kind.equals("1"))
				{ 
					//团购订单
				  if(teamOrderState==0)
				  {
				  	//判断该订单是配送还是发送券，若是发送券，则获取手机号，发送券和密码
						Map tempmaps=groupVoucherInfo.checkTeamOrderType(order_no);
						if(tempmaps!=null&&"1".equals(tempmaps.get("type").toString()))
						{
							groupVoucherInfo.insertTi_groupVoucher(tempmaps);
							maps.put("order_state","3");
							teamorderInfo.updateGroupVoucherNumByOrderNo(order_no);
						}
						else
						{
							 maps.put("order_state","1");
						}					
						teamorderInfo.updateTeambuyStateByOnliePay(maps);//修改订单状态
						ti_teambuyInfo.updateTeamNumByOrderNo(order_no); ////更新购买人数及购买数量
						financeInfo.updateTi_financeUsevmoneyByOrderNO(order_no);//如果订单使用虚拟币付款，需修改虚拟币
						maps.put("trade_state_code","1");
						trade_state_code=comm_giveInfo.updateCommStateByOnliePay(maps);		
			      if (trade_state_code.equals("1"))
			      {
			       	maps.put("use_vmoney","10");
						 	financeInfo.updateUse_MoneyByOnliePay(maps);//修改虚拟币
			      }	
		 			}
				}
				else
				{
						maps.put("order_state","1");
						orderInfo.updateOrderStateByOnliePay(maps);//修改订单状态
						if(temp!=null&&temp.size()>0)
						{
							maps=(Hashtable)temp.get(0);
							financeInfo.updatePointByOnliePay(maps);//修改积分
						}
				}
				out.println("success");	//请不要修改或删除
		} 
		/**
		该判断表示卖家已经发了货，但买家还没有做确认收货的操作
		**/
		else if(trade_status.equals("WAIT_BUYER_CONFIRM_GOODS"))
		{		
				Map mapz = new Hashtable();
				mapz.put("order_no",order_no);
				mapz.put("order_state","2");
				orderInfo.updateOrderStateByOnliePay(mapz);//修改订单状态
				
				symap.setString("order_no",order_no);
				symap.setString("order_state","2");	
				orderinfo.updateOrderStateForOrderNo(dbmMgr,symap);
				orderstateinfo.insert(dbmMgr,symap);
				goodstockinfo.updateGoodsStock(dbmMgr,symap);				 
				
			  out.println("success");	//请不要修改或删除
		}		
		else {
			out.println("success");	//请不要修改或删除
		}
	}
	//验证失败
	else
	{
		out.println("fail");
	}
%>
